/*
队列
  1. 和栈一样,也是一种受限的线性结构(先进先出/FIFO)
 */

//封装队列(两种实现方式,链表,数组)

// 1. 基于数组实现队列

class Queue {
  constructor() {
    this.items = [];
  }

  //常用操作

  //rear(后端入队)
  enqueue(el) {
    this.items.push(el);
  }

  //front(前端出队)
  dequeue() {
    return this.items.shift();
  }

  //查看队列队首位置元素
  front() {
    if (this.isEmpty()) {
      throw new Error("队列元素为空");
    }
    return this.items[0];
  }

  //队列的长度
  size() {
    return this.items.length;
  }
  //查看队列是否为空
  isEmpty() {
    return this.size() == 0;
  }
  //查看队列中的所有元素
  toString() {
    return this.items.reduce((acc, curr) => (acc += curr + " "), "");
  }
}
